// MCP使用演示 - 展示如何在实际场景中使用MCP客户端
const { ToolManager } = require('../dist/tools/index.js');

async function mcpUsageDemo() {
    const toolManager = new ToolManager();
    
    console.log('=== 🎯 MCP使用演示 ===\n');
    console.log('这个演示展示如何使用MCP客户端连接远程服务器并调用工具\n');
    
    const serverName = 'demo-server';
    const mcpServerPath = 'E:\\mcp_server\\mcp_server\\out';
    
    try {
        // 场景1: 项目协作 - 连接到远程文件系统服务器
        console.log('📁 场景1: 连接到远程文件系统服务器');
        console.log('用途: 访问其他项目的文件系统工具\n');
        
        const connectResult = await toolManager.executeTool('mcp-client', {
            action: 'connect',
            serverName: serverName,
            command: 'node index.js',
            cwd: mcpServerPath
        });
        
        console.log('连接结果:');
        console.log(connectResult);
        console.log('\n' + '='.repeat(60) + '\n');
        
        // 场景2: 工具发现 - 了解远程服务器能提供什么功能
        console.log('🔍 场景2: 发现远程服务器的能力');
        console.log('用途: 了解可以使用哪些远程工具\n');
        
        const toolsResult = await toolManager.executeTool('mcp-client', {
            action: 'list-tools',
            serverName: serverName
        });
        
        console.log('可用工具:');
        console.log(toolsResult);
        console.log('\n' + '='.repeat(60) + '\n');
        
        // 场景3: 资源访问 - 获取远程资源
        console.log('📚 场景3: 访问远程资源');
        console.log('用途: 获取远程服务器提供的资源\n');
        
        const resourcesResult = await toolManager.executeTool('mcp-client', {
            action: 'list-resources',
            serverName: serverName
        });
        
        console.log('可用资源:');
        console.log(resourcesResult);
        console.log('\n' + '='.repeat(60) + '\n');
        
        // 场景4: 远程工具调用 - 实际使用远程功能
        console.log('⚡ 场景4: 调用远程工具');
        console.log('用途: 使用远程服务器的文件操作工具\n');
        
        // 尝试调用一些常见的文件系统工具
        const testCalls = [
            {
                name: 'list-directory-tree',
                description: '获取目录结构',
                args: { dir: '.', maxDepth: 2 }
            },
            {
                name: 'read-lines', 
                description: '读取文件内容',
                args: { path: 'package.json', from: 1, to: 5 }
            }
        ];
        
        for (const testCall of testCalls) {
            console.log(`尝试调用: ${testCall.name} (${testCall.description})`);
            try {
                const callResult = await toolManager.executeTool('mcp-client', {
                    action: 'call-tool',
                    serverName: serverName,
                    toolName: testCall.name,
                    toolArgs: testCall.args
                });
                
                console.log('✅ 调用成功:');
                console.log(callResult.substring(0, 500) + (callResult.length > 500 ? '...' : ''));
                
            } catch (error) {
                console.log(`⚠️ 工具 ${testCall.name} 可能不可用: ${error.message}`);
            }
            console.log('');
        }
        
        console.log('='.repeat(60) + '\n');
        
        // 场景5: 连接管理 - 查看和管理连接
        console.log('🔗 场景5: 连接管理');
        console.log('用途: 管理多个MCP服务器连接\n');
        
        const serversResult = await toolManager.executeTool('mcp-client', {
            action: 'list-servers'
        });
        
        console.log('当前连接状态:');
        console.log(serversResult);
        console.log('\n' + '='.repeat(60) + '\n');
        
        // 清理: 断开连接
        console.log('🧹 清理: 断开连接');
        const disconnectResult = await toolManager.executeTool('mcp-client', {
            action: 'disconnect',
            serverName: serverName
        });
        
        console.log(disconnectResult);
        
        // 总结
        console.log('\n🎉 MCP使用演示完成！\n');
        console.log('💡 关键要点:');
        console.log('1. MCP客户端可以连接到任何兼容的MCP服务器');
        console.log('2. 通过list-tools了解远程服务器的能力');
        console.log('3. 通过call-tool调用远程工具就像调用本地工具一样');
        console.log('4. 可以同时连接多个MCP服务器扩展能力');
        console.log('5. 记得在使用完毕后断开连接释放资源');
        
    } catch (error) {
        console.error('❌ 演示过程中出现错误:', error);
        
        // 尝试清理
        try {
            await toolManager.executeTool('mcp-client', {
                action: 'disconnect',
                serverName: serverName
            });
            console.log('✅ 已清理连接');
        } catch (cleanupError) {
            console.error('清理时出错:', cleanupError.message);
        }
    }
}

// 运行演示
mcpUsageDemo().catch(console.error);